<?php

namespace App\Common\Cla\Weixin\Pay\Order;

use App\Common as com;
use App\Common\Cla\Weixin\Pay\Order\WebCallback as nameWebCallback;

class WebCallback extends com\Cla\ClaBase {

	// ===============================
	//
	//
	// 下面为静态方法
	//
	//
	// ===============================

	/**
	 * @param array $message
	 * @param array $fail 需要使用 call_user_func( $fail, '' ) 或者 $fail('') 调用
	 * @return mixed
	 */
	public static function handlePaidNotifyMessage( array $message, array $fail ):mixed {
		// 检查是否支付成功
		if( $message['return_code'] === 'SUCCESS' ){ // return_code 表示通信状态，不代表支付状态
			// 用户是否支付成功
			if( $message['result_code'] !== 'SUCCESS' ){
				// 用户支付失败
				return $fail( '通信失败，请稍后再通知我' );
			}
		} else{
			return $fail( '通信失败，请稍后再通知我' );
		}
		// todo 调用微信的【订单查询】接口查一下该笔订单的情况，确认是已经支付
		// 交由订单对应的处理类
		$orderPrefix = substr( $message['out_trade_no'], 0, strlen( $message['out_trade_no'] ) - 18 );
		switch( $orderPrefix ){
			case com\Model\AppChargingOrder::gosDataUnit()->goVar()->varSerialPrefix_Charging:
				$orderOfId = com\Cla\App\Charging\Order\ExtCharging\OfOrderId::makeBySerialIdOrNull( $message['out_trade_no'] );
				if( $orderOfId === null ){
					return $fail( '订单不存在，请稍后再通知我' );
				}
				// 检查订单支付类型
				$orderOfId->payEventAsWeixin( $message['total_fee'] / 100 );
				//
				// $orderOfId->goStatus()->setStatusAsPayed( $message['total_fee'] / 100 );
				break;
			default:
				// 订单不存在
				return $fail( '订单不存在，请稍后再通知我' );
		}
		//
		return true;
	}

}
